//
//  UIToolsControl.h
//  Btpin
//
//  Created by Vic on 2019/3/10.
//  Copyright © 2019 Vic. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "PublicCategoryElementModel.h"
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import "PSPaddingTextField.h"

// type：reg为注册 login为登录 reset_pwd为重置密码 bind为换绑帐号 4......
typedef NS_OPTIONS(NSUInteger, GetCaptchaType) {
    GetCaptchaTypeOfDefault             =       0,
    GetCaptchaTypeOfRegister            =  1 << 1,
    GetCaptchaTypeOfSignin              =  1 << 2,
    GetCaptchaTypeOfChangePassword      =  1 << 3,
    GetCaptchaTypeOfChangeAccount       =  1 << 4,
    GetCaptchaTypeOfChangeAccount1      =  1 << 5
};

typedef NS_OPTIONS(NSUInteger, DecimalNumberArithmetic) {
    DecimalNumberArithmeticDefault          = 1 << 0,
    DecimalNumberArithmeticByAdding         = 1 << 1,   // 加
    DecimalNumberArithmeticBySubtracting    = 1 << 2,   // 减
    DecimalNumberArithmeticByMultiplyingBy  = 1 << 3,   // 乘
    DecimalNumberArithmeticByDividingBy     = 1 << 4,   // 除
    DecimalNumberArithmeticCompare          = 1 << 5    // 比较
};

typedef NS_OPTIONS(NSUInteger, ShareType) {
    ShareTypeOfDefault              =       0,
    ShareTypeOfWXHaoyou             =  1 << 1,  // 微信好友
    ShareTypeOfWXPengyouquan        =  1 << 2,  // 微信朋友圈
    ShareTypeOfQQ                   =  1 << 3,  // 微信朋友圈
    ShareTypeOfQQZone               =  1 << 4   // 微信朋友圈
};

typedef void (^requestSuccessBlock)(NSDictionary *responseObject);
typedef void(^signinCallback) (BOOL signinFlag);

@interface UIToolsControl : NSObject

+ (UILabel *)initLabelWithFrame:(CGRect)frame text:(NSString *)text textColor:(UIColor *)color font:(NSInteger)font;

/**
 设置圆角+阴影

 @param frame frame
 @param color 背景色
 @param cornerRadius 圆角大小
 @param borderColor 边框线颜色
 @param borderWidth 边框线宽
 @param shadowOffset (0,0):四周；x>0:向右偏移；x<0:向左偏移；y>0：向下偏移；y<0：向上偏移,这个跟shadowRadius配合使用
 @param shadowOpacity //阴影透明度，默认0
 @param shadowRadius //阴影半径
 @param shadowColor 阴影颜色
 @return view
 */
+ (UIView *)initViewWithFrame:(CGRect)frame backgroundColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius borderColor:(UIColor *)borderColor borderWidth:(CGFloat)borderWidth shadowOffset:(CGSize)shadowOffset shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowColor:(UIColor *)shadowColor;
+ (UIView *)initViewWithFrame:(CGRect)frame backgroundColor:(UIColor *)color;
+ (UIImageView *)initImageViewWithFrame:(CGRect)frame imageName:(NSString *)imageName;
+ (UIButton *)initButtonWithFrame:(CGRect)frame imageName:(NSString *)imageName target:(id)target action:(SEL)action title:(NSString *)title titleColor:(UIColor *)color;
+ (UITextField *)initTextFieldWithFrame:(CGRect)frame placeholder:(NSString *)placeholer secureTextEntry:(BOOL)YESorNO font:(CGFloat)font padding:(BOOL)padding;
+ (UITableView *)initTableViewWithFrame:(CGRect)frame target:(id)target style:(UITableViewStyle)style;
+ (UICollectionView *)initCollectionViewWithFrame:(CGRect)frame target:(id)target collectionViewLayout:(UICollectionViewFlowLayout *)layout collectionViewCellID:(NSString *)cellID registerClass:(Class)registerClass;
+ (UITextView *)initTextViewWithFrame:(CGRect)frame text:(NSString *)text textColor:(UIColor *)color font:(NSInteger)font editable:(BOOL)edit;
/**
 画虚线
 
 @param lineColor 线的颜色
 @param bounds 划线区域
 @param position 中心点
 @return 虚线
 */
+ (CAShapeLayer *)drawDottedLine:(UIColor *)lineColor bounds:(CGRect)bounds position:(CGPoint)position;
/**
 计算文字Size

 @param text 需要计算的字符串
 @param size size
 @param font font
 @return 返回高度、宽度
 */
+ (CGFloat)textWidth:(NSString *)text size:(CGSize)size font:(CGFloat)font;
+ (CGFloat)textHeight:(NSString *)text size:(CGSize)size font:(CGFloat)font;
+ (CGFloat)textHeightWithLineSpacing:(NSString *)text size:(CGSize)size font:(CGFloat)font;
+ (CGFloat)textHeightWithLineSpacing:(NSString *)text size:(CGSize)size boldFont:(CGFloat)font;

+ (void)buttonStype:(UIButton *)button select:(BOOL)select;


/**
 将json字符串转json数据

 @param jsonString json字符串
 @return json数据
 */
+ (NSDictionary *)convertJsonStringToDict:(NSString *)jsonString;

/**
 性别

 @return 男、女
 */
+ (NSString *)getGender;

/**
 处理数据，将数据转为string（无默认值）

 @param value 需要处理的数据
 @return 转为String
 */
+ (NSString *)dataAnalysis:(id)value;

/**
 处理数据，将数据转为string(有默认值)

 @param value 需要处理的数据
 @return 转为String
 */
+ (NSString *)dataAnalysisHasDefault:(id)value;


/**
 处理价格相关数据，将数据转为string

 @param value 需要处理的数据
 @return 转为String
 */
+ (NSString *)dataAnalysisForPrice:(id)value;


/**
 处理bool类型数据(可能没有value)

 @param value 需要处理的数据
 @return 处理后的bool数据
 */
+ (BOOL)dataAnalysisForBOOL:(id)value;

/**
 修正浮点型精度丢失

 @param data 传入接口取到的数据
 @return 修正精度后的数据
 */
+ (NSString *)reviseData:(id)data;

/**
 加、减、乘、除、比较

 @param arithmetic 加减乘除比较 DecimalNumberArithmeticDefault | DecimalNumberArithmeticByAdding | DecimalNumberArithmeticBySubtracting | DecimalNumberArithmeticByMultiplyingBy | DecimalNumberArithmeticByDividingBy | DecimalNumberArithmeticCompare
 @param value1 第一个数据
 @param value2 第二个数据
 @return 加减乘除返回（string）数据，比较返回（string）-1<小于>、0<等于>、1<大于>
 */
+ (NSString *)decimalNumberArithmetic:(DecimalNumberArithmetic)arithmetic value1:(NSString *)value1 value2:(NSString *)value2;

/**
 RSA加密

 @param string 需要加密的字符串
 @return RSA加密后的字符串
 */
//+ (NSString *)rsaEncryptString:(NSString *)string;

/**
 RSA解密

 @param string 需要加密的字符串
 @return RSA解密后的字符串
 */
//+ (NSString *)rsaDecryptString:(NSString *)string;

/**
 请求数据Request

 @param urlString URL
 @param parameterString 参数
 @return request
 */
+ (NSMutableURLRequest *)postUrlString:(NSString *)urlString withParameterString:(NSString *)parameterString;


/**
 获取验证码上传的类型

 @param getCaptchaType 类型
 @return 对应的string
 */
+ (NSString *)getCaptchaType:(GetCaptchaType)getCaptchaType;

/**
 获取短信验证码

 @param phone 手机号
 @param getCaptchaType 获取验证码类型
 @param success 接口返回数据
 */
+ (void)getCaptcha:(NSString *)phone countryCode:(NSString *)countryCode type:(NSString *)getCaptchaType successBlock:(requestSuccessBlock)success;

#pragma mark - 正则判断输入的手机号是否有效
+ (BOOL)validatePhoneNumber:(NSString *)textString;
#pragma mark - 正则判断输入的是不是QQ号
+ (BOOL)validateQQ:(NSString *)textString;
/**
 正则判断输入的是不是数字

 @param textString 需要判断的字符串
 @return 返回是否为数字
 */
+ (BOOL)validateNumber:(NSString *)textString;

/**
 正则判断输入的是不是非0正整数

 @param textString 需要判断的字符串
 @return 返回是否为非0正整数
 */
+ (BOOL)validatePositiveInteger:(NSString *)textString;
/**
 正则判断输入的是不是中、英文、数字

 @param textString 需要判断的字符串
 @return 返回是否为中、英文、数字
 */
+ (BOOL)validateENOrEnglishOrNumber:(NSString *)textString;
/**
 正则判断输入的是不是整数

 @param textString 需要判断的字符串
 @return 返回是否为整数
 */
+ (BOOL)validateInteger:(NSString *)textString;
/**
 正则判断输入的是不是数字字母

 @param textString 需要判断的字符串
 @return 返回是否为数字字母
 */
+ (BOOL)validateNumberAndLetter:(NSString *)textString;

/**
 正则判断输入的是不是邮箱

 @param textString 需要判断的字符串
 @return 返回是否为邮箱
 */
+ (BOOL)validateEmail:(NSString *)textString;

/**
 正则判断输入的是不是身份证号

 @param textString 需要判断的字符串
 @return 返回是否为有效身份证号
 */
+ (BOOL)validateIDCard:(NSString *)textString;
/**
 处理手机号（中间四位*表示）

 @param phoneNumber 手机号
 @return 中间*的手机号
 */
+ (NSString *)handlePhoneNumber:(NSString *)phoneNumber;
/**
 MD5数据加密

 @param string 原始数据
 @return MD5加密数据
 */
+ (NSString *)MD5DataEncryption:(NSString *)string;
/**
 生成二维码

 @param content 需要生成二维码的原始字符串
 @return 返回二维码
 */
+ (UIImage *)generateQRCode:(NSString *)content;
/**
 处理图片

 @param image CIImage图片
 @param resolution 分辨率：越大分辨率越高
 @return 返回图片
 */
+ (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withResolution:(CGFloat)resolution;
/**
 获取截图

 @param view 需要截图的View
 @return 返回View截图
 */
+ (UIImage *)getImageFromView:(UIView *)view;

/**
 时间戳转化成时间

 @param timestamp 时间戳
 @param format 时间格式（yyyy-MM-dd HH:mm:ss）
 @return 返回时间
 */
+ (NSString *)timestampConversionTime:(NSInteger)timestamp andFormat:(NSString *)format;

/**
 获取当前的时间

 @return 当前的时间 yyyy-MM-dd
 */
+ (NSString *)getCurrentTime;
/**
 获取当前时间戳

 @return 当前时间戳
 */
+ (NSString *)getCurrentTimestamp;

/**
 时间字符串转时间戳

 @param string 时间字符串
 @return int 时间戳
 */
+ (NSInteger)stringConversiontimeStamp:(NSString *)string;


/**
 自定义Image

 @param rect rect
 @param color color
 @return 自定义Image
 */
+ (UIImage *)getCustomImageWithRect:(CGRect)rect color:(UIColor *)color;

/**
 重新设置image的size
 
 @param image 原始图片
 @param newSize 新的 size
 @return 新的image
 */
+ (UIImage *)imageResize:(UIImage *)image size:(CGSize)newSize;

/**
 数组数据反转

 @param array 数组
 @return 返回数据反转数组
 */
+ (NSArray *)returnReverseObject:(NSArray *)array;


/**
 公共参数

 @return 公共参数
 */
+ (NSMutableDictionary *)getPublicParameter;
/**
 获取系统版本号

 @return 系统版本号
 */
+ (NSString *)getSystemVersion;
/**
 获取UUID

 @return UUID
 */
+ (NSString *)getUUID;

#pragma mark - 获取app name
+ (NSString *)getAppName;

/**
 获取版本信息 version.build

 @return version.build(1.0.0.1)
 */
+ (NSString *)getVersionAndBuild;

/**
 获取版本信息 version

 @return 获取版本号 version
 */
+ (NSString *)getVersion;

/**
 获取设备型号

 @return 设备型号
 */
+ (NSString *)getDeviceModel;


/**
 判断系统版本号

 @return 系统版本号
 */
+ (BOOL)iOSVersion8;
+ (BOOL)iOSVersion9;
+ (BOOL)iOSVersion10;
+ (BOOL)iOSVersion11;
+ (BOOL)iOSVersion12;


/**
 判断文件是否已经在沙盒中存在

 @param fileName 文件名
 @return 是否存在
 */
+ (BOOL)isFileExist:(NSString *)fileName;

/**
 计算时间差

 @param startTime 计时开始时间
 @return 计时时间
 */
+ (NSString *)calculateCallTimeWithStartTime:(NSString *)startTime;

/**
 模态跳转登录页面

 @param target 目标
 */
+ (void)presentSignin:(id)target callBack:(signinCallback)signin;


/**
 判断手机有哪些平台

 @return 平台
 */
+ (NSMutableArray *)returnShareArray;
/**
 设置友盟分享面板
 */
+ (void)UMShareAppearance;

#pragma mark - 归档
+ (void)archiver:(NSArray *)data path:(NSString *)path;
#pragma mark - 解档
+ (NSMutableArray *)unArchiverPath:(NSString *)path;

#pragma mark - 处理缓存数据
+ (void)archiverCacheData;

#pragma mark - 根据ID返回那么
+ (NSString *)returnDataName:(NSArray<PublicCategoryElementModel *> *)arr id:(NSString *)ID;

#pragma mark - 移除第一响应
+ (void)resignFirstResponderForTextField:(UITextField *)textField;
+ (void)resignFirstResponderForTextFieldArray:(NSArray<UITextField *> *)dataArray;

#pragma mark - 判断w有没有安装微信
+ (BOOL)canOpenWXApp;
/**
 微信分享--文本

 @param text 文本
 @param shareType QQ、QQ空间分享类型（聊天界面 朋友圈 收藏 制定联系人）
 */
+ (void)wxShareText:(NSString *)text shareType:(ShareType)shareType;
/**
 微信分享--图片

 @param img 图
 @param shareType QQ、QQ空间分享类型（聊天界面 朋友圈 收藏 制定联系人）
 */
+ (void)wxShareImg:(UIImage *)img shareType:(ShareType)shareType;
/**
 微信分享--链接

 @param url 链接
 @param title 标题
 @param desc 简介
 @param shareType QQ、QQ空间（聊天界面 朋友圈 收藏 制定联系人）
 */
+ (void)wxShareWebURL:(NSString *)url title:(NSString *)title desc:(NSString *)desc thumbUrl:(NSString *)thumbUrl shareType:(ShareType)shareType;
#pragma mark - 判断有没有安装QQ
+ (BOOL)canOpenQQApp;
/**
 QQ分享--文本
 
 @param text 分享文字
 @param shareType QQ、QQ空间
 */
#pragma mark -
+ (void)qqShareText:(NSString *)text shareType:(ShareType)shareType;
/**
 QQ分享--图片

 @param img 分享图片
 @param title 标题
 @param desc 简介
 @param shareType QQ、QQ空间
 */
+ (void)qqShareImg:(UIImage *)img title:(NSString *)title desc:(NSString *)desc shareType:(ShareType)shareType;
/**
 QQ分享--链接

 @param url 链接
 @param title 标题
 @param desc 简介
 @param thumbUrl 缩略图
 @param shareType QQ、QQ空间
 */
+ (void)qqShareWebURL:(NSString *)url title:(NSString *)title desc:(NSString *)desc thumbUrl:(NSString *)thumbUrl shareType:(ShareType)shareType;

/**
 视图截图
 */
+ (UIImage *)snapshot:(UIView *)view;

/**
 保存相册
 */
+ (void)savePhotos:(UIImage *)image;


/**
 时间转换月-日
 */
+ (NSString *)conversionMonthAndDay:(NSString *)time;

/**
 时间转换月-日-时-分 当天显示时分
 */
+ (NSString *)conversionMonthDayHoursMinuteOrHoursMinute:(NSInteger)timeInteger;

//余额显示规则控制
+ (NSString *)showAmount:(NSString *)str;

/**
 
 获取url中的参数并返回
 @param urlString 带参数的url
 @return @{NSDictionary:参数字典}
 */
+ (NSDictionary *)getParamsWithUrlString:(NSString*)urlString;

//转码方法

+ (NSString*)URLDecodedString:(NSString*)str;

//比较时间 YES 表示结束时间大于起始时间 NO相反
+ (BOOL)comparisonLatterStarTime:(NSString *)startime endTime:(NSString *)endtime;

@end
